// 基础颜色渲染着色器程序
export default [
    `
        attribute vec3 position;
        attribute vec3 normal;
        attribute vec4 color;  // 添加颜色属性

        uniform mat4 modelMatrix;
        uniform mat4 viewMatrix;
        uniform mat4 projectionMatrix;
        uniform vec3 lightPosition;

        varying vec3 vNormal;
        varying vec3 vPosition;
        varying vec4 vColor;  // 添加颜色变量
        
        mat3 transpose(mat3 m) {
            return mat3(
                m[0][0], m[1][0], m[2][0],
                m[0][1], m[1][1], m[2][1],
                m[0][2], m[1][2], m[2][2]
            );
        }

        mat3 inverse(mat3 m) {
            float det = m[0][0] * (m[1][1] * m[2][2] - m[2][1] * m[1][2]) -
                        m[1][0] * (m[0][1] * m[2][2] - m[2][1] * m[0][2]) +
                        m[2][0] * (m[0][1] * m[1][2] - m[1][1] * m[0][2]);
            return mat3(
                (m[1][1] * m[2][2] - m[2][1] * m[1][2]) / det,
                (m[2][0] * m[1][2] - m[1][0] * m[2][2]) / det,
                (m[1][0] * m[2][1] - m[2][0] * m[1][1]) / det,
                (m[2][1] * m[0][2] - m[0][1] * m[2][2]) / det,
                (m[0][0] * m[2][2] - m[2][0] * m[0][2]) / det,
                (m[2][0] * m[0][1] - m[0][0] * m[2][1]) / det,
                (m[0][1] * m[1][2] - m[1][1] * m[0][2]) / det,
                (m[1][0] * m[0][2] - m[0][0] * m[1][2]) / det,
                (m[0][0] * m[1][1] - m[1][0] * m[0][1]) / det
            );
        }
        void main() {
            gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.0);
            // vNormal = mat3(modelMatrix) * normal;
            vNormal = normal;
            vec3 pos = vec3(modelMatrix * vec4(position, 1.0));
            vColor = color;  // 将颜色传递到片段着色器
            vPosition = pos;
            // gl_FragDepth = pos.z;
        }
    `,
    `
        precision mediump float;
        varying vec3 vNormal;
        varying vec3 vPosition;
        varying vec4 vColor;  // 使用传递过来的颜色
        uniform vec3 lightPosition;
        
        void main() {
            vec3 lightDir = normalize(lightPosition - vPosition);
            float diff = max(dot(vNormal, lightDir), 0.0);

            // 使用材质颜色（vColor）和光照计算结果
            // vec3 finalColor = vColor.rgb * diff;  // 假设光源颜色为白色（1.0, 1.0, 1.0）

            // 环境光颜色（可以根据需要调整亮度）
            vec3 ambient = vec3(0.4);  // 环境光强度为 20%

            // 漫反射光照计算
            vec3 diffuse = vColor.rgb * diff;

            // 最终颜色 = 环境光 + 漫反射
            vec3 finalColor = ambient + diffuse;

            gl_FragColor = vec4(finalColor, vColor.a);  // 保持 alpha 通道不变
        }
    `
];
